#!/bin/bash

# XappTool 完整构建和混淆脚本
# 集成配置管理和代码混淆

set -e

echo "=== XappTool 构建和混淆工具 ==="
echo

# 默认配置
ENVIRONMENT="production"
OBFUSCATION_LEVEL="medium"
CREATE_ZIP=false
CLEAN_ONLY=false
SKIP_BUILD=false
SKIP_OBFUSCATION=false

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo
    echo "选项:"
    echo "  -e, --environment <env>     环境 (development, staging, production)"
    echo "  -o, --obfuscation <level>   混淆级别 (light, medium, heavy)"
    echo "  -z, --zip                   创建压缩包"
    echo "  -c, --clean                 仅清理构建产物"
    echo "  --skip-build                跳过构建步骤"
    echo "  --skip-obfuscation          跳过混淆步骤"
    echo "  -h, --help                  显示帮助信息"
    echo
    echo "示例:"
    echo "  $0 -e production -o heavy -z"
    echo "  $0 --environment staging --obfuscation medium --zip"
    echo "  $0 --clean"
}

# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -e|--environment)
            ENVIRONMENT="$2"
            shift 2
            ;;
        -o|--obfuscation)
            OBFUSCATION_LEVEL="$2"
            shift 2
            ;;
        -z|--zip)
            CREATE_ZIP=true
            shift
            ;;
        -c|--clean)
            CLEAN_ONLY=true
            shift
            ;;
        --skip-build)
            SKIP_BUILD=true
            shift
            ;;
        --skip-obfuscation)
            SKIP_OBFUSCATION=true
            shift
            ;;
        -h|--help)
            show_help
            exit 0
            ;;
        *)
            echo -e "${RED}错误: 未知参数 $1${NC}"
            show_help
            exit 1
            ;;
    esac
done

# 验证环境
case $ENVIRONMENT in
    development|staging|production)
        ;;
    *)
        echo -e "${RED}错误: 无效的环境 '$ENVIRONMENT'${NC}"
        echo "支持的环境: development, staging, production"
        exit 1
        ;;
esac

# 验证混淆级别
case $OBFUSCATION_LEVEL in
    light|medium|heavy)
        ;;
    *)
        echo -e "${RED}错误: 无效的混淆级别 '$OBFUSCATION_LEVEL'${NC}"
        echo "支持的级别: light, medium, heavy"
        exit 1
        ;;
esac

echo -e "${BLUE}=== 构建配置 ===${NC}"
echo -e "环境: ${GREEN}$ENVIRONMENT${NC}"
echo -e "混淆级别: ${GREEN}$OBFUSCATION_LEVEL${NC}"
echo -e "创建压缩包: ${GREEN}$CREATE_ZIP${NC}"
echo

# 清理函数
clean_build() {
    echo -e "${BLUE}正在清理构建产物...${NC}"
    
    # 清理前端构建产物
    if [ -d "merchant/dist" ]; then
        rm -rf merchant/dist
        echo -e "${GREEN}✓ 清理 merchant/dist${NC}"
    fi
    
    # 清理混淆产物
    if [ -d "obfuscation/merchant-obfuscated" ]; then
        rm -rf obfuscation/merchant-obfuscated
        echo -e "${GREEN}✓ 清理 obfuscation/merchant-obfuscated${NC}"
    fi
    
    if [ -d "obfuscation/sdk-obfuscated" ]; then
        rm -rf obfuscation/sdk-obfuscated
        echo -e "${GREEN}✓ 清理 obfuscation/sdk-obfuscated${NC}"
    fi
    
    # 清理压缩包
    if [ -f "obfuscation/*-obfuscated.zip" ]; then
        rm -f obfuscation/*-obfuscated.zip
        echo -e "${GREEN}✓ 清理压缩包${NC}"
    fi
    
    echo -e "${GREEN}清理完成！${NC}"
}

# 如果仅清理，执行后退出
if [ "$CLEAN_ONLY" = true ]; then
    clean_build
    exit 0
fi

# 配置环境
echo -e "${BLUE}正在配置环境...${NC}"
./deploy-config.sh $ENVIRONMENT

# 构建前端
if [ "$SKIP_BUILD" = false ]; then
    echo -e "${BLUE}正在构建前端项目...${NC}"
    
    # 检查依赖
    if [ ! -d "merchant/node_modules" ]; then
        echo -e "${YELLOW}安装前端依赖...${NC}"
        cd merchant && npm install && cd ..
    fi
    
    # 构建项目
    cd merchant && npm run build && cd ..
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✓ 前端构建完成${NC}"
    else
        echo -e "${RED}✗ 前端构建失败${NC}"
        exit 1
    fi
fi

# 代码混淆
if [ "$SKIP_OBFUSCATION" = false ]; then
    echo -e "${BLUE}正在安装混淆工具...${NC}"
    
    # 检查混淆工具依赖
    if [ ! -d "obfuscation/node_modules" ]; then
        cd obfuscation && npm install && cd ..
    fi
    
    echo -e "${BLUE}正在执行代码混淆...${NC}"
    cd obfuscation
    
    # 混淆参数
    OBFUSCATE_ARGS="--level=$OBFUSCATION_LEVEL"
    if [ "$CREATE_ZIP" = true ]; then
        OBFUSCATE_ARGS="$OBFUSCATE_ARGS --zip"
    fi
    
    # 执行混淆
    npm run obfuscate:all -- $OBFUSCATE_ARGS
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✓ 代码混淆完成${NC}"
    else
        echo -e "${RED}✗ 代码混淆失败${NC}"
        exit 1
    fi
    
    cd ..
fi

# 生成部署包
echo -e "${BLUE}正在生成部署包...${NC}"

# 创建部署目录
DEPLOY_DIR="deploy-$ENVIRONMENT-$(date +%Y%m%d-%H%M%S)"
mkdir -p $DEPLOY_DIR

# 复制文件
echo -e "${BLUE}复制文件到部署目录...${NC}"

# 复制前端文件
if [ -d "merchant/dist" ]; then
    cp -r merchant/dist $DEPLOY_DIR/frontend
    echo -e "${GREEN}✓ 复制前端文件${NC}"
fi

# 复制混淆后的文件
if [ -d "obfuscation/merchant-obfuscated" ]; then
    cp -r obfuscation/merchant-obfuscated $DEPLOY_DIR/frontend-obfuscated
    echo -e "${GREEN}✓ 复制混淆后的前端文件${NC}"
fi

if [ -d "obfuscation/sdk-obfuscated" ]; then
    cp -r obfuscation/sdk-obfuscated $DEPLOY_DIR/sdk-obfuscated
    echo -e "${GREEN}✓ 复制混淆后的SDK文件${NC}"
fi

# 复制配置文件
cp config.js $DEPLOY_DIR/
cp deploy-config.sh $DEPLOY_DIR/
if [ -f "obfuscation/*-obfuscated.zip" ]; then
    cp obfuscation/*-obfuscated.zip $DEPLOY_DIR/
fi

# 创建部署说明
cat > $DEPLOY_DIR/README.md << EOF
# XappTool 部署包

## 环境信息
- 环境: $ENVIRONMENT
- 混淆级别: $OBFUSCATION_LEVEL
- 构建时间: $(date '+%Y-%m-%d %H:%M:%S')

## 文件说明

### 前端文件
- \`frontend/\` - 原始前端构建文件
- \`frontend-obfuscated/\` - 混淆后的前端文件（推荐用于生产环境）

### SDK文件
- \`sdk-obfuscated/\` - 混淆后的SDK文件

### 配置文件
- \`config.js\` - 全局配置文件
- \`deploy-config.sh\` - 部署配置脚本

## 部署步骤

1. **配置域名**
   \`\`\`bash
   ./deploy-config.sh $ENVIRONMENT --api-domain YOUR_API_DOMAIN --merchant-domain YOUR_MERCHANT_DOMAIN
   \`\`\`

2. **部署前端**
   将 \`frontend-obfuscated/\` 目录部署到您的Web服务器

3. **部署后端**
   按照后端部署文档部署API服务

4. **部署SDK**
   将混淆后的SDK文件部署到CDN或静态资源服务器

## 注意事项
- 混淆后的代码不可读，请保留原始源代码
- 建议在测试环境充分测试后再部署到生产环境
- 定期更新混淆配置以提高安全性

## 支持
如有问题，请联系技术支持。
EOF

# 创建压缩包
if [ "$CREATE_ZIP" = true ]; then
    echo -e "${BLUE}创建部署压缩包...${NC}"
    zip -r "$DEPLOY_DIR.zip" $DEPLOY_DIR
    echo -e "${GREEN}✓ 部署压缩包创建完成: $DEPLOY_DIR.zip${NC}"
fi

echo -e "${GREEN}=== 构建完成 ===${NC}"
echo -e "部署目录: ${BLUE}$DEPLOY_DIR${NC}"
if [ "$CREATE_ZIP" = true ]; then
    echo -e "压缩包: ${BLUE}$DEPLOY_DIR.zip${NC}"
fi
echo
echo -e "${YELLOW}下一步建议:${NC}"
echo "1. 检查部署目录中的文件"
echo "2. 在测试环境部署并验证功能"
echo "3. 确认无误后部署到生产环境"
echo
echo -e "${GREEN}✅ 构建和混淆完成！${NC}"